/*******************************************************************************
* Copyright (C) 2019 China Micro Semiconductor Limited Company. All Rights Reserved.
*
* This software is owned and published by:
* CMS LLC, No 2609-10, Taurus Plaza, TaoyuanRoad, NanshanDistrict, Shenzhen, China.
*
* BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND
* BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT.
*
* This software contains source code for use with CMS
* components. This software is licensed by CMS to be adapted only
* for use in systems utilizing mixic components. CMS shall not be
* responsible for misuse or illegal use of this software for devices not
* supported herein. CMS is providing this software "AS IS" and will
* not be responsible for issues arising from incorrect user implementation
* of the software.
*
* This software may be replicated in part or whole for the licensed use,
* with the restriction that this Disclaimer and Copyright notice must be
* included with each copy of this software, whether used in part or whole,
* at all times.
*/


/****************************************************************************/
/** \file isr.c
**
**	History:
**	
*****************************************************************************/
/****************************************************************************/
/*	include files
*****************************************************************************/
#include "main.h"
/****************************************************************************/
/*	Local pre-processor symbols/macros('#define')
*****************************************************************************/

/****************************************************************************/
/*	Global variable definitions(declared in header file with 'extern')
*****************************************************************************/


/****************************************************************************/
/*	Local type definitions('typedef')
*****************************************************************************/

/****************************************************************************/
/*	Local variable  definitions('static')
*****************************************************************************/


/****************************************************************************/
/*	Local function prototypes('static')
*****************************************************************************/

/****************************************************************************/
/*	Function implementation - global ('extern') and local('static')
*****************************************************************************/

void SysTick_Handler(void)
{
	static uint32_t secondCnt = 0;
	
	//--------------------------------------------------------------------------/
	SysTick->CTRL|=SysTick_CTRL_COUNTFLAG_Msk;
	
	TimeFlag_1ms = 1;

	sysTimeTickMs++;
	M2_BackRunTime++;
	M2_ManualRunTime++;

	if(++secondCnt >= 1000)
	{
		secondCnt = 0;
		TimeFlag_1S = 1;
	}

	M1_Task_1ms();
	M2_Task_1ms();

	ADC0_Sample();


	//	//--------------------------------------------------------------------------/
	//	// 电机故障检测	
	//	#if (Config_Debug_Mode == Debug_Disable)
	//			
	//	MC_MotorFault_Check();
	//	
	//	#endif
	//	
	//	//--------------------------------------------------------------------------/
	//	// 电机初始状态任务
	//	MC_MotorInit_Process();
	//	
	//	//--------------------------------------------------------------------------/
	//	// 电机转速计算 
	//	MC_MotorSpeed_Calc();
	//	
	//	//--------------------------------------------------------------------------/	
	//	// 电机调速模块控制 
	//	MC_Speed_Control();
	//	
	//	//--------------------------------------------------------------------------/
	//	// 时序相关处理 
	//	if(Time.Charge_Count > 0)		Time.Charge_Count --;
	//	if(Time.Motor_Restart > 0)		Time.Motor_Restart --;

	

	//--------------------------------------------------------------------------/	
}
     
/****************************************************************************
 ** \brief	NMI_Handler
 **
 ** \param [in]  none   
 ** \return none
 ** \note
****************************************************************************/
void NMI_Handler(void)
{
	
}
/****************************************************************************
 ** \brief	HardFault_Handler
 **
 ** \param [in]  none   
 ** \return none
 ** \note
****************************************************************************/

void HardFault_Handler(void)
{
	EPWM->LOCK = EPWM_LOCK_P1B_WRITE_KEY; EPWM->MASK = 0x00003F00;EPWM->LOCK = 0x0;

	DelayTime_ms(500);
	
	SYS_ResetMCU();
}

/****************************************************************************
 ** \brief	SVC_Handler
 **
 ** \param [in]  none   
 ** \return none
 ** \note
****************************************************************************/
void SVC_Handler(void)
{
	
}

/****************************************************************************
 ** \brief	PendSV_Handler
 **
 ** \param [in]  none   
 ** \return none
 ** \note
****************************************************************************/
void PendSV_Handler(void)
{
	
}

           
/****************************************************************************
 ** \brief	GPIO0_IRQHandler
 **
 ** \param [in]  none   
 ** \return none
 ** \note
****************************************************************************/
void GPIO0_IRQHandler(void)
{
	
}

/****************************************************************************
 ** \brief	GPIO1_IRQHandler
 **
 ** \param [in]  none   
 ** \return none
 ** \note
****************************************************************************/
void GPIO1_IRQHandler(void)
{
	
}
/****************************************************************************
 ** \brief	GPIO2_IRQHandler
 **
 ** \param [in]  none   
 ** \return none
 ** \note
****************************************************************************/
void GPIO2_IRQHandler(void)
{
//	
}
/****************************************************************************
 ** \brief	GPIO3_IRQHandler
 **
 ** \param [in]  none   
 ** \return none
 ** \note
****************************************************************************/
//void GPIO3_IRQHandler(void)
//{
	
//}
/****************************************************************************
 ** \brief	GPIO4_IRQHandler
 **
 ** \param [in]  none   
 ** \return none
 ** \note
****************************************************************************/
void GPIO4_IRQHandler(void)
{
	
}
/****************************************************************************
 ** \brief	CCP_IRQHandler
 **
 ** \param [in]  none   
 ** \return none
 ** \note
****************************************************************************/
//void CCP_IRQHandler(void)
//{
//	
//}
/****************************************************************************
 ** \brief	ADC0_IRQHandler
 **
 ** \param [in]  none   
 ** \return none
 ** \note
****************************************************************************/
void ADC0_IRQHandler(void)
{
	
}
/****************************************************************************
 ** \brief	WWDT_IRQHandler
 **
 ** \param [in]  none   
 ** \return none
 ** \note
****************************************************************************/
void WWDT_IRQHandler(void)
{
	
}
/****************************************************************************
 ** \brief	EPWM_IRQHandler
 **
 ** \param [in]  none   
 ** \return none
 ** \note
****************************************************************************/
//void EPWM_IRQHandler(void)
//{
//	if(EPWM_GetZeroIntFlag(EPWM0))
//	{
//		GPIO1->DO_f.P2 = ~GPIO1->DO_f.P2;	
//		
//		EPWM_ClearZeroIntFlag(EPWM0);	
//	}
//	NVIC_ClearPendingIRQ(EPWM_IRQn);
//}
/****************************************************************************
 ** \brief	ADC1_IRQHandler
 **
 ** \param [in]  none   
 ** \return none
 ** \note
****************************************************************************/
//void ADC1_IRQHandler(void)
//{
//	
//}
/****************************************************************************
 ** \brief	ACMP_IRQHandler
 **
 ** \param [in]  none   
 ** \return none
 ** \note
****************************************************************************/
void ACMP_IRQHandler(void)
{
	// 清除中断标志 
	
		ACMP_ClearIntFlag(ACMP1);	
		NVIC_ClearPendingIRQ(ACMP_IRQn);
	
		// 关闭输出 
		//System_Modules_off();
		
		// 短路标志置位
		Fault_ShortCircuit = 1;
		//MOTOR_FAULT_CODE   = FAULT_SHORTCIRCUIT;
		
		// 系统状态重启
		//MOTOR_STATE = MC_INIT;
		gTrigStatus = 0;
		M1_Flag.RunStop = 0;
		Motor.En = 0;
		SYSTEM_STATE = SYS_FAULT; 

		//log_w("ACMP1.Out = %u",ACMP_GetResult(ACMP1));
		
		// 参数初始化
		//FOC_ControlPara_Init();

		ACMP_DisableInt(ACMP1);
	}

/****************************************************************************
 ** \brief	UART0_IRQHandler
 **
 ** \param [in]  none   
 ** \return none
 ** \note
****************************************************************************/
	void UART0_IRQHandler(void)
	{
	#if 0
		
	/*----------------------------------------------------------------------------------------*/	
		U_IntID = (UART0->IIR & 0x0F);		// 获取中断事件ID。此处不能打断点，会导致状态位丢失，读取后IIR寄存器值将会改变 
		U_IntID = U_IntID >>1;
		U_LSRFlag = UART0->LSR;
	
//		//TxByte('%');
//		
//		switch(U_IntID) 							// 处理事件
//		{
//			case 0: 									// Modem 状态改变
//				break;
//			case 0x1:									// THR 寄存器为空 （发送后 THR的值会自动清除）		
//				U_TxdFlag =1;		
//			  break;
//						
//			case 0x2:									// FIFO接收到数据后，并等于设置的FIFO等级，则产生中断
//	
//				U_count =0;
//				while(UART0->LSR & UART_LSR_RDR_Msk)
//				{
//					U_ReceiveData[U_count++] = UART_ReadRBR(UART0);
//					
//				}	
//				U_RxdFlag = 1;
//				//TxByte('$');
//						
//			
//				break;		
//			case 0x3:									// Rx line 状态变化 ->监测LSR[4:1]	
//	
//				if(U_LSRFlag & (1<<1))				// FIFO溢出
//				{
//						
//				}	
//				if(U_LSRFlag & (1<<2))				//PE
//				{
//					
//				}	
//				if(U_LSRFlag & (1<<3))				//FE
//				{
//					
//				}	
//				if(U_LSRFlag & (1<<4))				//BI
//				{
//					
//				}	
//				UART_EnableFIFO(UART0,FIFO_L0_1BYTE, FIFO_L2_8BYTE, FIFO_RST_DIS, FIFO_RST_EN); 
//				//TxByte('#');
//				break;		
//			case 0x6:					// 1帧数据的定时时间内未接收到新数据,触发FIFO 接收定时溢出中断	
//		
//				//UART_EnableFIFO(UART0,FIFO_L0_1BYTE, FIFO_L2_8BYTE, FIFO_RST_DIS, FIFO_RST_EN);	/* 清除掉接收FIFO*/ 
//				//TxByte('&');
//	
//				U_count =0;
//				while(UART0->LSR & UART_LSR_RDR_Msk)
//				{
//					U_ReceiveData[U_count++] = UART_ReadRBR(UART0);
//					
//				}
//				U_RxdFlag = 1;
//				
//	//			while(UART1->LSR & (0x1))			// 或者将FIFO的数据读完。
//	//			{				
//	//				UART_ReadRBR(UART0);
//	//			}			
//				break;		
//		}
	#endif
		
	}

/****************************************************************************
 ** \brief	UART1_IRQHandler
 **
 ** \param [in]  none   
 ** \return none
 ** \note
****************************************************************************/
//void UART1_IRQHandler(void)
//{
//	
//}
/****************************************************************************
 ** \brief	TMR0_IRQHandler
 **
 ** \param [in]  none   
 ** \return none
 ** \note
****************************************************************************/
//void TMR0_IRQHandler(void)
//{
//	
//}
/****************************************************************************
 ** \brief	TMR1_IRQHandler
 **
 ** \param [in]  none   
 ** \return none
 ** \note
****************************************************************************/
//void TMR1_IRQHandler(void)
//{
//                       
//}
/****************************************************************************
 ** \brief	WDT_IRQHandler
 **
 ** \param [in]  none   
 ** \return none
 ** \note
****************************************************************************/
void WDT_IRQHandler(void)
{
	
}
/****************************************************************************
 ** \brief	I2C_IRQHandler
 **
 ** \param [in]  none   
 ** \return none
 ** \note
****************************************************************************/
void I2C_IRQHandler(void)
{
	
}

/****************************************************************************
 ** \brief	GPIO0_IRQHandler
 **
 ** \param [in]  none   
 ** \return none
 ** \note
****************************************************************************/
void LVD_IRQHandler(void)
{
	
}





